package com.sxt.disruptor.quickstart;

import com.lmax.disruptor.RingBuffer;

/**
 * 	生产者
 * @author Administrator
 *
 */
public class StringEventProducer {
	//核心类，环形数组
	public final RingBuffer<StringEvent> ringBuffer;
	/**
	 * 通过构造方法初始化环形数组核心类
	 * @param ringBuffer
	 */
	public StringEventProducer(RingBuffer<StringEvent> ringBuffer) {
		this.ringBuffer = ringBuffer;
	}
	/**
	 * 	生产事件（数据）的方法，实质是往环形数组里放置数据
	 * @param data
	 */
	public void onData(String data) {
		//1.ringBuffer获取下一个序号，也就是要放置数据的位置
		long sequence = this.ringBuffer.next();
		try {
			//2.取出空的事件队列
			StringEvent stringEvent = this.ringBuffer.get(sequence);
			//3.获取事件队列传递的数据
			stringEvent.setValue(data);
			
		}finally {
			//4.发布事件
			this.ringBuffer.publish(sequence);
		}
	}
}
